'use strict';
const jwt = require('jsonwebtoken');

/**
 * 登录信息验证中间件
 */
module.exports = () => async (ctx, next) => {
  console.log('----')
  // 判断请求头中是否有 token
  const token = ctx.request.headers['authorization'];
  if (!token) {
    ctx.error(403);
    return;
  }

  // 判断 token 是否正确(docs: https://www.npmjs.com/package/jsonwebtoken)
  try {
    ctx.user = await jwt.verify(token, ctx.app.config.keys);
    if (ctx.user.type === 'admin' || ctx.user.type === 'user') {
      const res = await ctx.service.admin.findOne(ctx.user.id);
      if (!res) {
        ctx.error(403, '用户不存在');
        return;
      } else {
        ctx.user = res;
      }
    } else {
      const res = await ctx.service.user.findOne(ctx.user.id);
        if (!res) {
            ctx.error(403, '用户不存在');
            return;
        } else {
            ctx.user = res;
        }
    }
    await next();
  } catch (e) {
    console.log(e)
    ctx.error(500, e.message);
  }
};
